package com.hx.netty.chat.protocol;

import cn.hutool.core.util.StrUtil;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
import org.msgpack.MessagePack;

/**
 * @author Huathy
 * @date 2021-10-24 22:17
 * @description
 */
public class ImEncoder extends MessageToByteEncoder<ImMsg> {
    @Override
    protected void encode(ChannelHandlerContext ctx, ImMsg msg, ByteBuf out) throws Exception {
        out.writeBytes(new MessagePack().write(msg));
    }

    public String encode(ImMsg msg) {
        if (msg == null) {
            return "";
        }
        String prex = buildMsg(msg.getCmd()) + buildMsg(msg.getTime());
        if (IMP.LOGIN.getName().equals(msg.getCmd())
                || IMP.FLOWER.getName().equals(msg.getCmd())) {
            prex += buildMsg(msg.getSender()) + buildMsg(msg.getTerminal());
        } else if (IMP.CHAT.getName().equals(msg.getCmd())) {
            prex += buildMsg(msg.getSender());
        } else if (IMP.SYSTEM.getName().equals(msg.getCmd())) {
            prex += buildMsg(msg.getOnline());
        }
        if (StrUtil.isNotBlank(msg.getContent())) {
            prex += ("-" + msg.getContent());
        }
        return prex;
    }

    private String buildMsg(Object str) {
        return "[" + str + "]";
    }
}
